home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1995.rar / 1995 / DEC / DI9512AC / fmain.pas < prev    next >
Pascal/Delphi Source File  |  1995-08-18  |  6KB  |  229 lines

  1. unit Fmain;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, StdCtrls, ExtCtrls,
  8.   acList, acStream, Example, Buttons;
  9.  
  10.  
  11. const
  12.   LOG_FILE_NAME   = 'LOGGER.DAT';
  13.   MAX_LOG_ITEMS   = 1024;
  14.   LOG_UPDATE_FREQ = 20;  { seconds }
  15.  
  16. type
  17.   TMainForm = class(TForm)
  18.     LbLog: TListBox;
  19.     GrpLogOptions: TGroupBox;
  20.     ChLogResources: TCheckBox;
  21.     ChLogMemory: TCheckBox;
  22.     ChLogDiskSpace: TCheckBox;
  23.     TmrLog: TTimer;
  24.     HdLog: THeader;
  25.     BtnStartStop: TBitBtn;
  26.     BtnClear: TBitBtn;
  27.     BtnSummarize: TBitBtn;
  28.     procedure FormCreate(Sender: TObject);
  29.     procedure FormDestroy(Sender: TObject);
  30.     procedure TmrLogTimer(Sender: TObject);
  31.     procedure BtnStartStopClick(Sender: TObject);
  32.     procedure BtnClearClick(Sender: TObject);
  33.     procedure BtnSummarizeClick(Sender: TObject);
  34.   private
  35.     { Private declarations }
  36.     FOptions   : TOptions;    { Option settings }
  37.     FLog       : TLog;        { List for log entries }
  38.     FLogStream : TLogStream;  { Stream for data file }
  39.     procedure ReadLog;
  40.     procedure SaveLog;
  41.     procedure AddToLog(const LogItem: TLogItem);
  42.   public
  43.     { Public declarations }
  44.   end;
  45.  
  46. var
  47.   MainForm: TMainForm;
  48.  
  49. implementation
  50.  
  51. {$R *.DFM}
  52.  
  53.  
  54. { ReadLog reads the options and the log from the data file }
  55. procedure TMainForm.ReadLog;
  56. begin
  57.   if ( FileExists(FLogStream.Filename) ) then
  58.     begin
  59.     with  FLogStream  do
  60.       begin
  61.       OpenForInput;
  62.       ReadObject(FOptions);
  63.       ReadObject(FLog);
  64.       Close;
  65.       end;
  66.     end;
  67. end;
  68.  
  69. { SaveLog saves the options and the log to the data file }
  70. procedure TMainForm.SaveLog;
  71. begin
  72.   with  FLogStream  do
  73.     begin
  74.     OpenForOutput;
  75.     SaveObject(FOptions);
  76.     SaveObject(FLog);
  77.     Close;
  78.     end;
  79. end;
  80.  
  81. procedure TMainForm.AddToLog(const LogItem: TLogItem);
  82. begin
  83.   if ( FLog.Count = MAX_LOG_ITEMS ) then FLog.DeleteIdx(0);
  84.   FLog.Add(LogItem);
  85. end;
  86.  
  87. procedure TMainForm.FormCreate(Sender: TObject);
  88. begin
  89.   { Set timer interval }
  90.   TmrLog.Interval := 1000 * LOG_UPDATE_FREQ;
  91.  
  92.   { Create an options object }
  93.   FOptions := TOptions.Create;
  94.  
  95.   { Create log list object, tie it to the log list box, }
  96.   {   and give it ownership of the log entries.         }
  97.   FLog := TLog.Create(LbLog.Items, True);
  98.  
  99.   { Create the log stream object for managing the app data file }
  100.   FLogStream := TLogStream.Create(ExtractFilePath(Application.ExeName) + LOG_FILE_NAME);
  101.  
  102.   { Read in saved log }
  103.   ReadLog;
  104.  
  105.   { Update controls }
  106.   ChLogResources.Checked := FOptions.LogResources;
  107.   ChLogMemory.Checked    := FOptions.LogMemory;
  108.   ChLogDiskSpace.Checked := FOptions.LogDisk;
  109. end;
  110.  
  111. procedure TMainForm.FormDestroy(Sender: TObject);
  112. begin
  113.   { Update controls }
  114.   FOptions.LogResources := ChLogResources.Checked;
  115.   FOptions.LogMemory    := ChLogMemory.Checked;
  116.   FOptions.LogDisk      := ChLogDiskSpace.Checked;
  117.  
  118.   { Save log }
  119.   SaveLog;
  120.  
  121.   { Free the log stream object }
  122.   FLogStream.Free;
  123.  
  124.   { Free log list object. List will take care of deleting }
  125.   {   the individual log entries.                         }
  126.   FLog.Free;
  127.  
  128.   { Free options object }
  129.   FOptions.Free;
  130. end;
  131.  
  132.  
  133. procedure TMainForm.TmrLogTimer(Sender: TObject);
  134. var
  135.   LogItem : TLogItem;
  136. begin
  137.   { Create log items and add them to the log. }
  138.   { NOTE: We don't have to deal with the list box, just the list object. }
  139.   if ( ChLogResources.Checked ) then AddToLog(TResourceLogItem.Create);
  140.   if ( ChLogMemory.Checked )    then AddToLog(TMemoryLogItem.Create);
  141.   if ( ChLogDiskSpace.Checked ) then AddToLog(TDiskLogItem.Create);
  142.  
  143.   { Scroll LB contents to show added items }
  144.   LbLog.TopIndex := FLog.Count - 1;
  145. end;
  146.  
  147. procedure TMainForm.BtnStartStopClick(Sender: TObject);
  148. begin
  149.   { Toggle timer enable to start/stop logging as appropriate }
  150.   if ( TmrLog.Enabled ) then
  151.     begin  { Disable it }
  152.     TmrLog.Enabled := False;
  153.     BtnStartStop.Caption := 'Start Logging';
  154.     self.Caption := Application.Title + ' - Inactive';
  155.     end
  156.   else
  157.     begin  { Enable it }
  158.     TmrLog.Enabled := True;
  159.     BtnStartStop.Caption := 'Stop Logging';
  160.     self.Caption := Application.Title + ' - Active';
  161.     { Fake an timer message so its obvious logging has started }
  162.     TmrLogTimer(self);
  163.     end;
  164. end;
  165.  
  166. procedure TMainForm.BtnClearClick(Sender: TObject);
  167. begin
  168.   { Empty the log by removing everything from the list. }
  169.   { NOTE: Don't need to access the list box directly.   }
  170.   FLog.DeleteAll;
  171. end;
  172.  
  173.  
  174. procedure TMainForm.BtnSummarizeClick(Sender: TObject);
  175. var
  176.   MinResource : TResourceLogItem;
  177.   MinMemory   : TMemoryLogItem;
  178.   MinDisk     : TDiskLogItem;
  179.   ItemIdx     : Integer;
  180.   Item        : TLogItem;
  181. begin
  182.   { Report maximum resource usage }
  183.   MinResource := nil;
  184.   MinMemory   := nil;
  185.   MinDisk     := nil;
  186.   try
  187.     MinResource := TResourceLogItem.Create;
  188.     MinMemory   := TMemoryLogItem.Create;
  189.     MinDisk     := TDiskLogItem.Create;
  190.     { Scan log and track minimums }
  191.     for ItemIdx := 0 to (FLog.Count - 1) do
  192.       begin
  193.       Item := FLog[ItemIdx];
  194.       if ( Item is TResourceLogItem ) then
  195.         begin
  196.         if ( (Item as TResourceLogItem).Minimum < MinResource.Minimum ) then
  197.           begin
  198.           MinResource.Assign(Item);
  199.           end;
  200.         end
  201.       else if ( Item is TMemoryLogItem ) then
  202.         begin
  203.         if ( (Item as TMemoryLogItem).FreeSpace < MinMemory.FreeSpace ) then
  204.           begin
  205.           MinMemory.Assign(Item);
  206.           end;
  207.         end
  208.       else if ( Item is TDiskLogItem ) then
  209.         begin
  210.         if ( (Item as TDiskLogItem).FreeSpace < MinDisk.FreeSpace ) then
  211.           begin
  212.           MinDisk.Assign(Item);
  213.           end;
  214.         end;
  215.       end;
  216.     { Report results }
  217.     ShowMessage('Maximum Resource Usage'#13#13 +
  218.                 MinResource.AsString + #13 +
  219.                 MinMemory.AsString + #13 +
  220.                 MinDisk.AsString);
  221.   finally
  222.     if ( Assigned(MinResource) ) then MinResource.Free;
  223.     if ( Assigned(MinMemory)   ) then MinMemory.Free;
  224.     if ( Assigned(MinDisk)     ) then MinDisk.Free;
  225.     end;
  226. end;
  227.  
  228. end.
  229.